package geral.manager;

import geral.util.FacesUtil;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.ejb.EJB;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.enterprise.context.ConversationScoped;
import javax.inject.Inject;
import javax.inject.Named;

import aspecto.annotation.Permissao;
import br.com.sgc.entities.geral.HorarioFuncionario;
import br.com.sgc.exception.ValidacaoException;
import br.com.sgc.permissao.Role;
import br.com.sgc.session.GenericSession;

@Named
@ConversationScoped
public class HorarioManager extends GenericManager implements Serializable {

	private static final long serialVersionUID = 1L;

	@EJB private GenericSession<HorarioFuncionario> horarioSession;

	private HorarioFuncionario horario = new HorarioFuncionario();

	private List<HorarioFuncionario> listHorario = new ArrayList<HorarioFuncionario>();
	
	@Inject private UtilManager utilManager;

	
	@Permissao(role = Role.Sistema_RH_Horario_Listar)
	public String list() {
		prepareSave();
		listHorario = horarioSession.findAll(HorarioFuncionario.class, utilManager.getSegurancaManager().getUsuarioLogado().getClinica().getId());
		return "formHorario";
	}

	@Permissao(role = Role.Sistema_RH_Horario_Salvar)
	@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
	public String prepareSave() {
		horario = new HorarioFuncionario();
		horario.setClinica(utilManager.getSegurancaManager().getUsuarioLogado().getClinica());
		return "formHorario";
	}

	@Permissao(role = Role.Sistema_RH_Horario_Salvar)
	@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
	public String save() {
		try {
			horarioSession.save(horario);
			FacesUtil.mensInfo("Salvo Com Sucesso!");
			return list();

		//Erros de negócio
		} catch (ValidacaoException e) {
			e.printStackTrace();
			FacesUtil.mensWarn(e.getMessage());
		}

		return null;
	}

	@Permissao(role = Role.Sistema_RH_Horario_Atualizar)
	@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
	public String prepareUpdate() {
		horario = horarioSession.findById(HorarioFuncionario.class, horario.getId());
		horario.setClinica(utilManager.getSegurancaManager().getUsuarioLogado().getClinica());
		return "formHorario";
	}

	@Permissao(role = Role.Sistema_RH_Horario_Atualizar)
	@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
	public String update() {
		try {
			horarioSession.update(horario);
			FacesUtil.mensInfo("Atualizado Com Sucesso!");
			return list();

		//Erros de negócio
		} catch (ValidacaoException e) {
			e.printStackTrace();
			FacesUtil.mensWarn(e.getMessage());
		}

		return null;
	}

	@Permissao(role = Role.Sistema_RH_Horario_Excluir)
	@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
	public String delete() {

		try {
			horarioSession.delete(horario);
			FacesUtil.mensInfo("Exclu�do Com Sucesso!");
			return list();

		// Erros de negócio
		} catch (ValidacaoException e) {
			FacesUtil.mensInfo("Imposs�vel Excluir!");
		}

		return null;
	}

	public GenericSession<HorarioFuncionario> getHorarioSession() {
		return horarioSession;
	}

	public void setHorarioSession(GenericSession<HorarioFuncionario> horarioSession) {
		this.horarioSession = horarioSession;
	}

	public HorarioFuncionario getHorario() {
		return horario;
	}

	public void setHorario(HorarioFuncionario horario) {
		this.horario = horario;
	}

	public List<HorarioFuncionario> getListHorario() {
		return listHorario;
	}

	public void setListHorario(List<HorarioFuncionario> listHorario) {
		this.listHorario = listHorario;
	}
	
}
